iT邦幫忙

2021 iThome 鐵人賽

DAY 4
0

畫面轉換

Intent是應用程式元件(Activity、Service、BroadcastReceiver、ContentProvider)的溝通橋樑,用來實現多個畫面轉換

startActivity(Intent(this, SecActivity::class.java))

用上述程式碼,可讓SecActivity覆蓋於this上

傳遞資料至下一個畫面

傳送單筆

  1. 宣告切換頁面的Intent
  2. 把資料放入Intent
  3. 發送Intent
var intent = Intent(this, SecActivity::class.java)
intent.putExtra("key","value")
startActivity(intent)

傳送多筆

var bundle = Bundle()
bundle.putInt("key1",123)
bundle.putString("key2","ABC")
var intent = Intent(this, SecActivity::class.java)
intent.putExtras(bundle)
startActivity(intent)

接收數據

intent?.extras>.let{ //判斷intent不為空且有夾帶資料
		val value1 = it.getInt("key1")
		val value2 = it.getInt("key2")
}

返回資料至上一個畫面

SAFR圖片.jpg

//取回資料
override fun onActivityResult(requestCode: Int,resultCode: Int, data:Intent?) {
    super.onActivityResult(requestCode,resultCode,data)
        
				data?.extras?.let{
						if(requestCode ==1 && requestCode == Activity.RESULT_OK){
								...//取得返回資料
						}
		}
}
//建立資料
override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
				var bundle = Bundle()
				bundle.putInt("key1",123)
				bundle.putString("key2","ABC")
				var intent = Intent(this, SecActivity::class.java)
				intent.putExtras(bundle)
				startActivityForResult(intent,1) 
}

  • requestCode是一種需求發送的識別編號,在啟動對象時給予此編號,目的是讓需求發送者與接收者能夠有識別的方式
  • onActivityResult()會等待SecActivity返回結果,並根據requestCode識別返回對象,以及requestCode判斷在SecActivity中執行的情況。
setResult(Activity.RESULT_OK,intent) //設定要返回的資料
finish() //結束自身週期,
  • resultCode是一種向需求發送者回報執行結果的識別編號,例如:執行成功時用0表示,失敗時用-1表示,並回報給MainActivity處理

上一篇
Day 3 | 物件控制與事件監聽
下一篇
Day 5 | Fragment
系列文
社畜轉行之旅,30天Kotlin學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言